package com.shop.dao;

import java.util.List;

import com.shop.domain.Cart;
import com.shop.domain.Favorite;
import com.shop.domain.MessageCenter;
import com.shop.domain.Order;
import com.shop.domain.User;

/**
 * 
 * @author wenjuanhenxing
 * @version V1.0 UserDao.java 2016-2-10 上午11:11:40
 */
public interface UserDao {
	/**
	 * 判断用户名是否存在
	 * 
	 * @param username
	 *            用户名(忽略大小写)
	 * @return 用户名是否存在
	 */
	boolean usernameExists(String username);

	/**
	 * 判断E-mail是否存在
	 * 
	 * @param email
	 *            E-mail(忽略大小写)
	 * @return E-mail是否存在
	 */
	boolean emailExists(String email);

	/**
	 * 根据用户名查找会员
	 * 
	 * @param username
	 *            用户名(忽略大小写)
	 * @return 会员，若不存在则返回null
	 */
	User getUserByUsername(String username);

	/**
	 * 根据E-mail查找会员
	 * 
	 * @param email
	 *            E-mail(忽略大小写)
	 * @return 会员，若不存在则返回null
	 */
	User getUserByEmail(String email);

	/**
	 * 添加用户
	 * 
	 * @param user
	 * @return 添加成功返回true，否则false
	 */
	boolean addUser(User user);

	/**
	 * 
	 * @return 所有用户
	 */
	List<User> getAllUsers();

	/**
	 * 根据id查找用户
	 * 
	 * @param id
	 * @return User,若不存在则返回null
	 */
	User getUserById(Long id);

	/**
	 * 完成实名认证
	 * 
	 * @param true完成
	 */
	boolean finishCertify(User user);

	/**
	 * 更新用户冻结状态
	 * 
	 * @param id
	 * @return
	 */
	boolean updateFreezeStatus(User user);

	/**
	 * 查询用户的购物车
	 * 
	 * @param id
	 * @return
	 */
	List<Cart> getCarts(Long id);

	/**
	 * 查询用户的收藏夹
	 * 
	 * @param id
	 * @return
	 */
	List<Favorite> getFavorites(Long id);

	/**
	 * 查询用户收到的消息
	 * 
	 * @param id
	 * @return
	 */
	List<MessageCenter> getReceiveMessages(Long id);

	/**
	 * 查询用户发送的消息
	 * 
	 * @param id
	 * @return
	 */
	List<MessageCenter> getSendMessages(Long id);

	/**
	 * 查询用户买的东西
	 * 
	 * @param id
	 * @return
	 */
	List<Order> getBuyOrders(Long id);

	/**
	 * 查询用户销售订单
	 * 
	 * @param id
	 * @return
	 */
	List<Order> getSaleyOrders(Long id);

	boolean updateRealName(User user);

	boolean updatePassword(User user);

	boolean updateEmail(User user);

	boolean updatePhone(User user);

	boolean updateAddress(User user);

	boolean updateCredit(User user);

	boolean updateCertifyStatus(User user);
}
